home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / redakcyjne / programy / FEBE (Firefox Environment Backup Extension) 5.0 / febe-5.0-fx.xpi / chrome / febe.jar / content / febeDrag.js < prev    next >
Text File  |  2007-03-02  |  4KB  |  89 lines

  1. // Drag and drop code
  2. // Taken from template at http://kb.mozillazine.org/Dev_:_Extensions_:_Example_Code_:_Adding_Drag_and_Drop_to_Statusbarpanel
  3.  
  4. var febeStatObserver = {
  5.  init: function () {
  6.    febeStatObserver.flavour = "febeFla";    //any text you want but should have something to do with the extension name
  7.    febeStatObserver.statusbarPanel = "febestatusbar";//id of the statusbarpanel to drag
  8.    febeStatObserver.statbar = "status-bar";//name of statusbar
  9.    febeStatObserver.prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.febe.statpos.");
  10.    if(febeStatObserver.prefs.prefHasUserValue("insertAfter")){
  11.       document.getElementById(febeStatObserver.statbar).insertBefore(document.getElementById(febeStatObserver.statusbarPanel),document.getElementById(febeStatObserver.prefs.getCharPref("insertAfter")));
  12.    }   
  13.  },
  14.  getSupportedFlavours: function () {
  15.    var flavours = new FlavourSet();
  16.    flavours.appendFlavour(febeStatObserver.flavour);//text/unicode
  17.    return flavours;
  18.  },
  19.  onDragStart: function (evt,transferData,action){
  20.    var elme = evt.target;
  21.    while(elme != document.getElementById(febeStatObserver.statusbarPanel)){
  22.      elme =elme.parentNode;
  23.    }
  24.    var txt=elme.getAttribute("id");
  25.    transferData.data=new TransferData();
  26.    transferData.data.addDataForFlavour(febeStatObserver.flavour,txt);
  27.    var status = document.getElementById(febeStatObserver.statusbarPanel);
  28.    var statusbar = document.getElementById(febeStatObserver.statbar);
  29.    var child = statusbar.firstChild;
  30.    var x = 0;
  31.    while (child) {
  32.      if (child != status) {
  33.        if (!child.id) {
  34.          var newId = "statusbarpanel-noID"+x;
  35.          while (document.getElementById(newId)) newId += "x"+x;
  36.          child.id = newId;
  37.          child.setAttribute("persist", new String("id" + (child.persist ? " "+child.persist : "")) );
  38.          x++;
  39.        }
  40.        if (child.childNodes.length == 0 && document.getAnonymousNodes(child).length == 0)
  41.          child.setAttribute("abnochildren", true);
  42.        child.addEventListener("dragenter", function(event) { nsDragAndDrop.dragEnter(event,febeStatObserver); }, false);
  43.        child.addEventListener("dragover", function(event) { nsDragAndDrop.dragOver(event,febeStatObserver); }, false);
  44.        child.addEventListener("dragdrop", function(event) { nsDragAndDrop.drop(event,febeStatObserver); }, false);
  45.      }
  46.      child = child.nextSibling;
  47.    }
  48.    window.addEventListener("dragexit", function(event) { nsDragAndDrop.dragExit(event,febeStatObserver); }, true);
  49.  },
  50.  onDragEnter: function (evt,flavour,session){
  51.    var elm = evt.target;
  52.    while(elm.nodeName != "statusbarpanel"){
  53.      elm = elm. parentNode;
  54.    }
  55.  },
  56.  onDragOver: function (evt,flavour,session){
  57.    var elm = evt.target;
  58.    while(elm.parentNode.nodeName != "statusbar"){
  59.      elm = elm.parentNode;
  60.    }
  61.  },
  62.  onDrop: function (evt,dropdata,session){
  63.    if (dropdata.data!=""){
  64.      prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.febe.statpos.");
  65.      var elm = evt.target;
  66.      while(elm.nodeName != "statusbarpanel"){
  67.        elm = elm.parentNode;
  68.      }
  69.      // 'delta' is the difference between the mouse position when 
  70.      // the drop event occurs and the middle of the target's boxObject
  71.      // delta > 0 if the mouse is on the right of the middle
  72.      var delta = evt.clientX - (elm.boxObject.x + elm.boxObject.width / 2);
  73.      var elem = document.getElementById(dropdata.data);
  74.      var parent = elem.parentNode;
  75.      elem.setAttribute("insertafter",""+elm.getAttribute("id"));
  76.      (delta > 0) && (elm = elm.nextSibling);
  77.      if (elm) {
  78.        parent.insertBefore(elem,elm);
  79.      }
  80.      else {
  81.        parent.appendChild(elem);
  82.      }
  83.      // store the actual position into preferences
  84.      prefs.setCharPref("insertAfter",elm.getAttribute("id")+"");
  85.    }
  86.  }
  87. };
  88. window.addEventListener('load', febeStatObserver.init, false);
  89.